{

  /**
   * 抽象类 是对 类进行的一种约束
   *  抽象类 生下来就是为了给别人当父类的
   *  
   *  这个知识点和 c# java 等强类型语言是一样的！！！！！
   * 
   *  使用 abstract 定义的类是抽象类 继承抽象类的类 必须实现抽象类所定义的 抽象属性或者抽象方法
   * 
   * 比如 动物都有体重信息和移动的动作 就可以把这两个共有的东西抽象成一个类
   *  一些小动物的类再继承自这个动物类  如果有的类没有移动方法 或者 体重信息 编译就会失败
   * 
   *  其他注意点：
   *    抽象类中可以有不是抽象的方法
   *    抽象方法只能出现在抽象类中
   */

  abstract class animal{
    abstract move():void
    abstract weight:number
  }

  class Dog extends animal{
    public move():void{
      
    }
    weight = 40
  }

  /**
   * 会报错 因为没有实现 animal 这个抽象类的所有抽象属性或者方法
   */
  class Cat extends animal{
    public move():void{
      
    }
    // weight = 20
  }

  // let dog = new Dog()
}